package com.jzo2o.market.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jzo2o.common.model.PageResult;
import com.jzo2o.market.model.domain.Activity;
import com.jzo2o.market.model.dto.request.ActivityQueryForPageReqDTO;
import com.jzo2o.market.model.dto.request.ActivitySaveReqDTO;
import com.jzo2o.market.model.dto.response.ActivityInfoResDTO;

import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author itcast
 * @since 2023-09-16
 */
public interface IActivityService extends IService<Activity> {


    /**
     * 新增优惠券活动&&编辑优惠券活动
     *
     * @param dto
     */
    void saveActivity(ActivitySaveReqDTO dto);


    /**
     * 分页查询优惠券活动接口
     *
     * @param dto
     * @return
     */
    PageResult<ActivityInfoResDTO> activityPage(ActivityQueryForPageReqDTO dto);


    /**
     * 查询优惠券活动详情接口
     *
     * @param id
     * @return
     */
    ActivityInfoResDTO selectByActivityId(Long id);


    /**
     * 撤销活动
     *
     * @param id
     */
    void revokeActivityById(Long id);

    /**
     * 用户端抢券列表分页接口
     *
     * @param tabType
     * @return
     */
    List<ActivityInfoResDTO> queryForPage(Integer tabType);


    /**
     * 获取用户真实状态
     * @param dto
     * @param distributeStartTime
     * @param distributeEndTime
     * @return
     */
     Integer getRealStatus(ActivityInfoResDTO dto, LocalDateTime distributeStartTime, LocalDateTime distributeEndTime);

    /**
     * 库存-1 原子性操作
     * @param activityId
     * @return
     */
    boolean decrStockNum(Long activityId);
}
